package com.grape.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.github.pagehelper.PageInfo;
import com.grape.dto.SysUserDTO;
import com.grape.dto.OnlineUserDTO;
import com.grape.dto.UserDetailDTO;
import com.grape.entity.SysPermission;
import com.grape.vo.BaseVo;
import com.grape.vo.StartVO;
import com.grape.vo.StopVO;
import com.grape.entity.SysUser;
import com.grape.vo.UserVO;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

/**
 *
 * 用户信息表 服务类
 *
 * @author  putao
 * @email   2628279194@qq.com
 */
public interface ISysUserService extends IService<SysUser>, BaseService<SysUser> {

    /**
     * 分页
     * @param baseVo    统一分页对象
     * @return          用户信息表集合
     */
    List<SysUser> listData(BaseVo baseVo);

    /**
     * 修改
     * @param sysUser 用户信息表对象
     */
    void updateData(SysUser sysUser);

    /**
     * 新增
     * @param sysUser 用户信息表对象
     * @return 用户信息表对象
     */
    SysUser insertData(SysUser sysUser);

    /**
     * 删除
     * @param ids       单据ids
     * @return          删除条数
     */
    int deleteData(String ids);

    /**
     * 根据id查询详情
     * @param id    用户id
     * @return      用户对象
     */
     SysUser detail(String id);

    /**
     * 用户名密码登录
     * @param sysUserDto 用户数据
     * @return          用户vo
     */
    UserVO login(SysUserDTO sysUserDto);

    /**
     * 发送验证码
     *
     * @param phone 手机号码
     * @return      验证码
     */
    String sendCode(String phone);

    /**
     * 自定义分页
     * @param baseVo        分页对象
     * @return              用户集合
     */
    List<SysUser> listCustom(BaseVo baseVo);

    /**
     * 修改头像
     * @param file  文件
     * @return      上传文件后的地址
     */
    String updateAvatar(MultipartFile file) throws Exception;

    /**
     * 退出登录
     */
    void logout();

    /**
     * 定时更新用户连续记账天数
     */
    void increaseConsecutiveBkDay();

    /**
     * 分页用户数据
     * @param baseVo    分页数据
     * @return          分页对象
     */
    PageInfo<SysUser> userListPage(BaseVo baseVo);

    /**
     * 自定义分页
     * @param baseVo    分页参数
     * @return          用户集合
     */
    List<SysUser> listPageCustom(BaseVo baseVo);


    /**
     * 根据用户id锁定用户
     * @param startVo    用户id和原因数据
     */
    void start(StartVO startVo);

    /**
     * 根据用户id解锁用户
     * @param stopVo    用户id和原因数据
     */
    void stop(StopVO stopVo);

    /**
     * 注销账户
     */
    void logged();

    /**
     * 更新记账天数
     * @param number    记账天数
     */
    void updateBookkeepingNumber(int number);


     /**
      * 查询当前在线的用户
      *
      * @return 用户集合
      */
    List<OnlineUserDTO> onlineUserList();

    /**
     * 获取当前用户信息
     * @return  用户信息
     */
    UserDetailDTO detailDTO();

    /**
      * 根据用户id集合查询用户信息
      * @param userIdList 用户id集合
      * @return 用户集合
      */
    List<SysUser> listAll(List<String> userIdList);

    /**
      * 更新会员信息
      */
    void updateUserMember();

    /**
      * 根据用户名查询用户信息
      * @param username 用户名
      * @return 用户信息
      */
    SysUser getByUsername(String username);

    /**
      * 根据手机号查询用户信息
      * @param phone 手机号
      * @return 用户信息
      */
    SysUser getByPhone(String phone);

    /**
      * 根据用户id查询用户信息
      * @return 用户信息
      */
    SysUser getByUserId();

    /**
      * 根据用户id查询用户权限
      * @return 用户权限集合
      */
    List<SysPermission> getPermissionByUserId();
}

